package com.itheima.reggie.interceptor;

import com.alibaba.fastjson.JSON;
import com.itheima.reggie.common.BaseContext;
import com.itheima.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @version 1.0
 * @Author 杨旭康
 * @Date 2022/10/30 18:55
 * @question:
 */

//声明成一个bean 被config控制
@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //在拦截器配置那边已经取消了拦截登陆页面/静态资源等,此处只需要判断用户是否登录即可
        //1.管理端页面
        if (request.getSession().getAttribute("employee") != null) {
            log.info("用户已登录，用户id为：{}",request.getSession().getAttribute("employee"));
            //在此处将线程设置进去(用于获取id值)
            Long empId = (Long) request.getSession().getAttribute("employee");
            BaseContext.setCurrentId(empId);
            //不为null则匹配到了 直接放行
            return true;
        }

        //在拦截器配置那边已经取消了拦截登陆页面/静态资源等,此处只需要判断用户是否登录即可
        //2.用户登录页面
        if (request.getSession().getAttribute("user") != null) {
            log.info("用户已登录，用户id为：{}",request.getSession().getAttribute("user"));
            //在此处将线程设置进去(用于获取id值)
            Long userId = (Long) request.getSession().getAttribute("user");
            BaseContext.setCurrentId(userId);
            //不为null则匹配到了 直接放行
            return true;
        }

        //走到此处 则没有匹配到(给前端发回一个响应流响应数据)
        //前端的相应拦截器定义好了 必须响应此值(前端自动帮忙跳转接收到值之后)
        log.info("用户未登录");
        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
        return false;
    }
}
